Cleanups.
return ret;
}
-static __inline__ int HYPERVISOR_console_write(const char *str, int count)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_console_write),
- "b" (str), "c" (count) : "memory" );
-
-
- return ret;
-}
-
static __inline__ int HYPERVISOR_set_gdt(unsigned long *frame_list, int entries)
{
int ret;
return ret;
}
-static inline int HYPERVISOR_shutdown(void)
+static __inline__ int HYPERVISOR_shutdown(void)
{
int ret;
__asm__ __volatile__ (
return ret;
}
-static inline int HYPERVISOR_reboot(void)
+static __inline__ int HYPERVISOR_reboot(void)
{
int ret;
__asm__ __volatile__ (
return ret;
}
-static inline int HYPERVISOR_suspend(unsigned long srec)
+static __inline__ int HYPERVISOR_suspend(unsigned long srec)
{
int ret;
/* NB. On suspend, control software expects a suspend record in %esi. */
return ret;
}
+static __inline__ int HYPERVISOR_xen_version(int cmd)
+{
+ int ret;
+ __asm__ __volatile__ (
+ TRAP_INSTR
+ : "=a" (ret) : "0" (__HYPERVISOR_xen_version),
+ "b" (cmd) : "memory" );
+
+ return ret;
+}
+
+static __inline__ int HYPERVISOR_console_io(int cmd, int count, char *str)
+{
+ int ret;
+ __asm__ __volatile__ (
+ TRAP_INSTR
+ : "=a" (ret) : "0" (__HYPERVISOR_console_io),
+ "b" (cmd), "c" (count), "d" (str) : "memory" );
+
+ return ret;
+}
+
#endif /* __HYPERVISOR_H__ */
/* print out some useful information */
printk("Xen Minimal OS!\n");
- printk("start_info: %p\n", si);
+ printk("start_info: %p\n", si);
printk(" nr_pages: %lu", si->nr_pages);
printk(" shared_inf: %08lx\n", si->shared_info);
- printk(" pt_base: %p", (void *)si->pt_base);
+ printk(" pt_base: %p", (void *)si->pt_base);
printk(" mod_start: 0x%lx\n", si->mod_start);
- printk(" mod_len: %lu\n", si->mod_len);
-#if 0 /* XXX Change to use NETOP_GET_VIF_INFO and BLOCK_IO_OP_RING_ADDRESS */
- printk(" net_rings: ");
- for (i = 0; i < MAX_DOMAIN_VIFS; i++) {
- printk(" %lx", si->net_rings[i]);
- }; printk("\n");
- printk(" blk_ring: 0x%lx\n", si->blk_ring);
- printk(" dom_id: %ld\n", si->dom_id);
-#endif
- printk(" flags: 0x%lx\n", si->flags);
- printk(" cmd_line: %s\n", si->cmd_line ? (const char *)si->cmd_line : "NULL");
+ printk(" mod_len: %lu\n", si->mod_len);
+ printk(" flags: 0x%x\n", (unsigned int)si->flags);
+ printk(" cmd_line: %s\n",
+ si->cmd_line ? (const char *)si->cmd_line : "NULL");
/*
/* set up events */
init_events();
- /* install some handlers */
+ /*
+ * These need to be replaced with event-channel/control-interface
+ * equivalents.
+ */
+#if 0
+ /* Install some handlers. */
add_ev_action(EV_DIE, &exit_handler);
enable_ev_action(EV_DIE);
enable_hypervisor_event(EV_DIE);
add_ev_action(EV_DEBUG, &debug_handler);
enable_ev_action(EV_DEBUG);
enable_hypervisor_event(EV_DEBUG);
+#endif
/* init time and timers */
init_time();
retval = kvprintf(fmt, printk_buf, 10, ap);
printk_buf[retval] = '\0';
va_end(ap);
- (void)HYPERVISOR_console_write(printk_buf, strlen(printk_buf));
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(printk_buf),
+ printk_buf);
return retval;
}
static char printk_buf[1024];
retval = kvprintf(fmt, printk_buf, 10, ap);
printk_buf[retval] = '\0';
- (void)HYPERVISOR_console_write(printk_buf, strlen(printk_buf));
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(printk_buf),
+ printk_buf);
return retval;
}
#include <asm/io.h>
#include "../blkif.h"
-#ifndef NDEBUG
+#if 0
#define ASSERT(_p) \
if ( !(_p) ) { printk("Assertion '%s' failed, line %d, file %s", #_p , \
__LINE__, __FILE__); *(int*)0=0; }
#include <asm/ctrl_if.h>
#include <asm/io.h>
#include "../netif.h"
-#include "../../../../../net/bridge/br_private.h"
-#ifndef NDEBUG
+#if 0
#define ASSERT(_p) \
if ( !(_p) ) { printk("Assertion '%s' failed, line %d, file %s", #_p , \
__LINE__, __FILE__); *(int*)0=0; }
#define NETIF_HASH(_d,_h) (((int)(_d)^(int)(_h))&(NETIF_HASHSZ-1))
static netif_t *netif_hash[NETIF_HASHSZ];
-#ifdef XEN_BRIDGE
-static struct net_device *bridge_dev;
-static struct net_bridge *bridge_br;
-#endif
netif_t *netif_find_by_handle(domid_t domid, unsigned int handle)
{
unbind_evtchn_from_irq(netif->evtchn);
vfree(netif->tx); /* Frees netif->rx as well. */
rtnl_lock();
-#ifdef XEN_BRIDGE
- (void)br_del_if(bridge_br, netif->dev);
-#endif
(void)dev_close(netif->dev);
rtnl_unlock();
/* Disable queuing. */
dev->tx_queue_len = 0;
- /* XXX In bridge mode we should force a different MAC from remote end. */
+ /* Force a different MAC from remote end. */
dev->dev_addr[2] ^= 1;
- err = register_netdev(dev);
- if (err) {
- DPRINTK("Could not register new net device %s: err=%d\n", dev->name, err);
+ if ( (err = register_netdev(dev)) != 0 )
+ {
+ DPRINTK("Could not register new net device %s: err=%d\n",
+ dev->name, err);
create->status = NETIF_BE_STATUS_OUT_OF_MEMORY;
kfree(dev);
return;
netif_get(netif);
rtnl_lock();
-
(void)dev_open(netif->dev);
-#ifdef XEN_BRIDGE
- (void)br_add_if(bridge_br, netif->dev);
-
- /*
- * The default config is a very simple binding to eth0.
- * If eth0 is being used as an IP interface by this OS then someone
- * must add eth0's IP address to nbe-br, and change the routing table
- * to refer to nbe-br instead of eth0.
- */
- (void)dev_open(bridge_dev);
- if ( (eth0_dev = __dev_get_by_name("eth0")) != NULL )
- {
- (void)dev_open(eth0_dev);
- (void)br_add_if(bridge_br, eth0_dev);
- }
-#endif
-
rtnl_unlock();
(void)request_irq(netif->irq, netif_be_int, 0, netif->dev->name, netif);
void netif_interface_init(void)
{
memset(netif_hash, 0, sizeof(netif_hash));
-#ifdef XEN_BRIDGE
- if ( br_add_bridge("nbe-br") != 0 )
- BUG();
- bridge_dev = __dev_get_by_name("nbe-br");
- bridge_br = (struct net_bridge *)bridge_dev->priv;
- bridge_br->bridge_hello_time = bridge_br->hello_time = 0;
- bridge_br->bridge_forward_delay = bridge_br->forward_delay = 0;
- bridge_br->stp_enabled = 0;
-#endif
}
-
-#ifndef CONFIG_BRIDGE
-#error Must configure Ethernet bridging in Network Options
-#endif
-#ifndef XEN_BRIDGE
-EXPORT_SYMBOL(br_add_bridge);
-EXPORT_SYMBOL(br_del_bridge);
-EXPORT_SYMBOL(br_add_if);
-EXPORT_SYMBOL(br_del_if);
-EXPORT_SYMBOL(br_get_bridge_ifindices);
-EXPORT_SYMBOL(br_get_port_ifindices);
-#endif
ENTRY(hypervisor_call_table)
.long SYMBOL_NAME(do_set_trap_table) /* 0 */
.long SYMBOL_NAME(do_mmu_update)
- .long SYMBOL_NAME(do_console_write)
.long SYMBOL_NAME(do_set_gdt)
.long SYMBOL_NAME(do_stack_switch)
- .long SYMBOL_NAME(do_set_callbacks) /* 5 */
- .long SYMBOL_NAME(do_ni_syscall) # do_net_io_op
- .long SYMBOL_NAME(do_fpu_taskswitch)
+ .long SYMBOL_NAME(do_set_callbacks)
+ .long SYMBOL_NAME(do_fpu_taskswitch) /* 5 */
.long SYMBOL_NAME(do_sched_op)
.long SYMBOL_NAME(do_dom0_op)
- .long SYMBOL_NAME(do_ni_syscall) /* 10 */ # do_network_op
- .long SYMBOL_NAME(do_ni_syscall) # do_block_io_op
.long SYMBOL_NAME(do_set_debugreg)
.long SYMBOL_NAME(do_get_debugreg)
- .long SYMBOL_NAME(do_update_descriptor)
- .long SYMBOL_NAME(do_set_fast_trap) /* 15 */
+ .long SYMBOL_NAME(do_update_descriptor) /* 10 */
+ .long SYMBOL_NAME(do_set_fast_trap)
.long SYMBOL_NAME(do_dom_mem_op)
.long SYMBOL_NAME(do_multicall)
- .long SYMBOL_NAME(do_ni_syscall) # do_kbd_op
.long SYMBOL_NAME(do_update_va_mapping)
- .long SYMBOL_NAME(do_set_timer_op) /* 20 */
+ .long SYMBOL_NAME(do_set_timer_op) /* 15 */
.long SYMBOL_NAME(do_event_channel_op)
.long SYMBOL_NAME(do_xen_version)
.long SYMBOL_NAME(do_console_io)
.long SYMBOL_NAME(do_physdev_op)
- .long SYMBOL_NAME(do_update_va_mapping_otherdomain) /* 25 */
+ .long SYMBOL_NAME(do_update_va_mapping_otherdomain) /* 20 */
.rept NR_syscalls-((.-hypervisor_call_table)/4)
.long SYMBOL_NAME(do_ni_syscall)
.endr
strcpy(printk_prefix, prefix);
}
-/*
- * This hypercall is deprecated. Only permit its use in debug environments.
- */
-long do_console_write(char *str, unsigned int count)
-{
-#ifndef NDEBUG
-#define SIZEOF_BUF 256
- unsigned char safe_str[SIZEOF_BUF+1];
- unsigned char single_line[SIZEOF_BUF+2];
- unsigned char line_header[30];
- unsigned char *p;
- unsigned char c;
- unsigned long flags;
- int j;
-
- if ( count == 0 )
- return 0;
-
- if ( count > SIZEOF_BUF )
- count = SIZEOF_BUF;
-
- if ( copy_from_user(safe_str, str, count) )
- return -EFAULT;
- safe_str[count] = '\0';
-
- sprintf(line_header, "DOM%u: ", current->domain);
-
- p = safe_str;
- while ( *p != '\0' )
- {
- j = 0;
-
- while ( (c = *p++) != '\0' )
- {
- if ( c == '\n' )
- break;
- if ( (c < 32) || (c > 126) )
- continue;
- single_line[j++] = c;
- }
-
- single_line[j++] = '\n';
- single_line[j++] = '\0';
-
- spin_lock_irqsave(&console_lock, flags);
- __putstr(line_header);
- __putstr(single_line);
- spin_unlock_irqrestore(&console_lock, flags);
- }
-
- return 0;
-#else
- if ( !test_and_set_bit(DF_CONWRITEBUG, ¤t->flags) )
- {
- printk("DOM%u is attempting to use the deprecated "
- "HYPERVISOR_console_write() interface.\n", current->domain);
- printk(" - For testing, create a debug build of Xen\n");
- printk(" - For production, your OS must use the new console model\n");
- }
- return -ENOSYS;
-#endif
-}
-
void init_console(void)
{
extern unsigned char opt_console[];
/* EAX = vector; EBX, ECX, EDX, ESI, EDI = args 1, 2, 3, 4, 5. */
#define __HYPERVISOR_set_trap_table 0
#define __HYPERVISOR_mmu_update 1
-#define __HYPERVISOR_console_write 2 /* DEPRECATED */
-#define __HYPERVISOR_set_gdt 3
-#define __HYPERVISOR_stack_switch 4
-#define __HYPERVISOR_set_callbacks 5
-#define __HYPERVISOR_fpu_taskswitch 7
-#define __HYPERVISOR_sched_op 8
-#define __HYPERVISOR_dom0_op 9
-#define __HYPERVISOR_set_debugreg 12
-#define __HYPERVISOR_get_debugreg 13
-#define __HYPERVISOR_update_descriptor 14
-#define __HYPERVISOR_set_fast_trap 15
-#define __HYPERVISOR_dom_mem_op 16
-#define __HYPERVISOR_multicall 17
-#define __HYPERVISOR_update_va_mapping 19
-#define __HYPERVISOR_set_timer_op 20
-#define __HYPERVISOR_event_channel_op 21
-#define __HYPERVISOR_xen_version 22
-#define __HYPERVISOR_console_io 23
-#define __HYPERVISOR_physdev_op 24
-#define __HYPERVISOR_update_va_mapping_otherdomain 25
+#define __HYPERVISOR_set_gdt 2
+#define __HYPERVISOR_stack_switch 3
+#define __HYPERVISOR_set_callbacks 4
+#define __HYPERVISOR_fpu_taskswitch 5
+#define __HYPERVISOR_sched_op 6
+#define __HYPERVISOR_dom0_op 7
+#define __HYPERVISOR_set_debugreg 8
+#define __HYPERVISOR_get_debugreg 9
+#define __HYPERVISOR_update_descriptor 10
+#define __HYPERVISOR_set_fast_trap 11
+#define __HYPERVISOR_dom_mem_op 12
+#define __HYPERVISOR_multicall 13
+#define __HYPERVISOR_update_va_mapping 14
+#define __HYPERVISOR_set_timer_op 15
+#define __HYPERVISOR_event_channel_op 16
+#define __HYPERVISOR_xen_version 17
+#define __HYPERVISOR_console_io 18
+#define __HYPERVISOR_physdev_op 19
+#define __HYPERVISOR_update_va_mapping_otherdomain 20
/*
* MULTICALLS
#define DF_CONSTRUCTED 3 /* Has the guest OS been fully built yet? */
#define DF_IDLETASK 4 /* Is this one of the per-CPU idle domains? */
#define DF_PRIVILEGED 5 /* Is this domain privileged? */
-#define DF_CONWRITEBUG 6 /* Has this domain used the obsolete console? */
-#define DF_PHYSDEV 7 /* May this domain do IO to physical devices? */
-#define DF_BLOCKED 8 /* Domain is blocked waiting for an event. */
-#define DF_CTRLPAUSE 9 /* Domain is paused by controller software. */
-#define DF_SHUTDOWN 10 /* Guest shut itself down for some reason. */
-#define DF_CRASHED 11 /* Domain crashed inside Xen, cannot continue. */
-#define DF_DYING 12 /* Death rattle. */
-#define DF_RUNNING 13 /* Currently running on a CPU. */
-#define DF_CPUPINNED 14 /* Disables auto-migration. */
+#define DF_PHYSDEV 6 /* May this domain do IO to physical devices? */
+#define DF_BLOCKED 7 /* Domain is blocked waiting for an event. */
+#define DF_CTRLPAUSE 8 /* Domain is paused by controller software. */
+#define DF_SHUTDOWN 9 /* Guest shut itself down for some reason. */
+#define DF_CRASHED 10 /* Domain crashed inside Xen, cannot continue. */
+#define DF_DYING 11 /* Death rattle. */
+#define DF_RUNNING 12 /* Currently running on a CPU. */
+#define DF_CPUPINNED 13 /* Disables auto-migration. */
static inline int domain_runnable(struct domain *d)
{